// 不使用ts官方提供的工具类型实现
// 属性过滤，剔除、选中 部分数据
export {};

type User = {
  readonly id: number;
  name: string;
  tel: string;
  address?: string;
};
type MyPick<T, K> = {
  [P in keyof T as P extends K ? P : never]: T[P];
};
type MyOmit<T, K> = {
  [P in keyof T as P extends K ? never : P]: T[P];
};
// 属性值过滤，保留一个类型中 属性值是 string的类型
type PickByType<T, U> = {
  [K in keyof T as T[K] extends U ? K : never]: T[K];
};
type UserString = PickByType<User, string>;
